namespace FIREFLYX {
    /** 渲染管线父类 */
    export abstract class RenderPipeline {
        /** 光照模式 总是渲染, 不启用光照 */
        public static readonly LM_ALWAYS = "Always";
        /** 光照模式 前向光照渲染 */
        public static readonly LM_FORWARD = "Forward";
        /** 光照模式 延迟光照渲染 */
        public static readonly LM_DEFERRED = "Deferred";
        /** 光照模式  阴影投射*/
        public static readonly LM_SHADOW_CASTER = "ShadowCaster";

        protected _cullPassRendererIDs: number[] = [];
        /**
         * 执行渲染
         * @param context 引擎渲染上下文对象 
         * @param cameras 相机列表
         */
        public render(context: RenderContext, cameras: Camera[]): void {
            //
        }

        /**
         * 相机视锥剔除
         * @param camera 相机
         * @param rendererMap  渲染器容器 
         * @param result 通过剔除的列表
         */
        protected cameraFrustumCulling(camera: Camera, rendererMap: Map<number, Renderer>, result: number[]) {
            //
            result.length = 0;
            rendererMap.forEach((v, k) => {
                //用相机检测是否 通过
                let isPass = true;
                if (isPass) {
                    result.push(k);
                }
            });
        }
    }
}